package com.qckj.amz.utils.amzApi;

import com.qckj.common.core.domain.AjaxResult;
import com.squareup.okhttp.*;
import org.apache.http.*;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 * @author luchuan
 * @date 2022年12月03日 下午2:49 AmzHttpUtil工具类
 */
public class AmzHttpUtils {

  /**
   * get请求
   *
   * @return
   */
  public static String doGet(String url) {
    try {
      HttpClient client = new DefaultHttpClient();
      // 发送get请求
      HttpGet request = new HttpGet(url);
      HttpResponse response = client.execute(request);

      /** 请求发送成功，并得到响应* */
      if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
        /** 读取服务器返回过来的json字符串数据* */
        String strResult = EntityUtils.toString(response.getEntity());

        return strResult;
      }
    } catch (IOException e) {
      e.printStackTrace();
    }

    return null;
  }

  /**
   * post请求(用于key-value格式的参数)
   *
   * @param url
   * @param params
   * @return
   */
  public static String doPost(String url, Map params) {

    BufferedReader in = null;
    try {
      // 定义HttpClient
      HttpClient client = new DefaultHttpClient();
      // 实例化HTTP方法
      HttpPost request = new HttpPost();
      request.setURI(new URI(url));

      // 设置参数
      List<NameValuePair> nvps = new ArrayList<NameValuePair>();
      for (Iterator iter = params.keySet().iterator(); iter.hasNext(); ) {
        String name = (String) iter.next();
        String value = String.valueOf(params.get(name));
        nvps.add(new BasicNameValuePair(name, value));

      }
      request.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

      HttpResponse response = client.execute(request);
      int code = response.getStatusLine().getStatusCode();
      if (code == 200) { // 请求成功
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "utf-8"));
        StringBuffer sb = new StringBuffer("");
        String line = "";
        String NL = System.getProperty("line.separator");
        while ((line = in.readLine()) != null) {
          sb.append(line + NL);
        }
        in.close();
        return sb.toString();
      } else { //
        System.out.println("状态码：" + code);
        return null;
      }
    } catch (Exception e) {
      e.printStackTrace();

      return null;
    }
  }

  /**
   * post请求（用于请求json格式的参数）
   *
   * @param url
   * @param params
   * @return
   */
  public static String doPost(String url, String params) throws Exception {

    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpPost httpPost = new HttpPost(url); // 创建httpPost
    httpPost.setHeader("Accept", "application/json");
    httpPost.setHeader("Content-Type", "application/json");
    String charSet = "UTF-8";
    StringEntity entity = new StringEntity(params, charSet);
    httpPost.setEntity(entity);
    CloseableHttpResponse response = null;

    try {

      response = httpclient.execute(httpPost);
      StatusLine status = response.getStatusLine();
      int state = status.getStatusCode();
      if (state == HttpStatus.SC_OK) {
        HttpEntity responseEntity = response.getEntity();
        String jsonString = EntityUtils.toString(responseEntity);
        return jsonString;
      } else {
      }
    } finally {
      if (response != null) {
        try {
          response.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      try {
        httpclient.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return null;
  }

  /**
   * 上传xml封装数据至亚马逊
   * @param url   上传地址
   * @param xml   xml产品相关数据：
   *              产品饲料POST_PRODUCT_DATA
   *              库存饲料POST_INVENTORY_AVAILABILITY_DATA
   *              定价饲料POST_PRODUCT_PRICING_DATA
   *              产品图片POST_PRODUCT_IMAGE_DATA
   *              关系提要POST_PRODUCT_RELATIONSHIP_DATA（有变体时才会上传关系提要）
   *
   * @return      上传结果
   */
  public static AjaxResult uploadXmlToAmz(String url, String xml){

    xml = xml.replaceAll("\\\\", "");
    byte[] bytes = xml.getBytes(StandardCharsets.UTF_8);
    OkHttpClient client = new OkHttpClient();

    // contentType 必须与提供给 createFeedDocument 操作的输入相匹配。
    String contentType = String.format("text/xml; charset=UTF-8");
    try {
      Request request = new Request.Builder()
              .url(url)
              .put(RequestBody.create(MediaType.parse(contentType), bytes))
              .build();

      Response response = client.newCall(request).execute();
      if (!response.isSuccessful()) {
        //调用上载文档失败，响应代码：%d，消息：%s
        String errMsg = String.format("Call to upload document failed with response code: %d and message: %s", response.code(), response.message());
        System.out.println(errMsg);
        return AjaxResult.error(errMsg);
      }

    } catch (IOException e) {
      System.out.println(e.getMessage());
      return AjaxResult.error(e.getMessage());
    }
    return AjaxResult.success();
  }



}
